package xyz.shenmegui.foodcheckserver.utils;

import io.github.briqt.spark4j.SparkClient;
import io.github.briqt.spark4j.constant.SparkApiVersion;
import io.github.briqt.spark4j.exception.SparkException;
import io.github.briqt.spark4j.model.SparkMessage;
import io.github.briqt.spark4j.model.SparkSyncChatResponse;
import io.github.briqt.spark4j.model.request.SparkRequest;
import io.github.briqt.spark4j.model.response.SparkTextUsage;
import xyz.shenmegui.foodcheckserver.DO.Menu;

import java.util.ArrayList;
import java.util.List;

public class ChatUtils {

    /**
     * 向接口传递参数并获取返回结果
     * @param content
     * @return
     */
    public String chat(String content) {
        String result = StringUtils.EMPTY;
        SparkClient sparkClient = new SparkClient();
        // 设置认证信息
        sparkClient.appid = "054048dc";
        sparkClient.apiKey = "250178de81b1a34a00dc4b3f727420e3";
        sparkClient.apiSecret = "MzU4NmE0MjhlMmY2YTBmZTc2YzY4NWQy";

        // 消息列表，可以在此列表添加历史对话记录
        List<SparkMessage> messages = new ArrayList<>();
        messages.add(SparkMessage.systemContent("请你扮演营养师，为我安排早餐、中餐、晚餐的饮食，回答请严格按照以下格式:早餐: 食材:xxx。做法:xxx。能量:xxx。"));
        messages.add(SparkMessage.userContent(content));
        // 构造请求
        SparkRequest sparkRequest = SparkRequest.builder()
                // 消息列表
                .messages(messages)
                // 模型回答的tokens的最大长度,非必传，默认为2048。
                // V1.5取值为[1,4096]
                // V2.0取值为[1,8192]
                // V3.0取值为[1,8192]
                .maxTokens(2048)
                // 核采样阈值。用于决定结果随机性,取值越高随机性越强即相同的问题得到的不同答案的可能性越高 非必传,取值为[0,1],默认为0.5
                .temperature(0.2)
                // 指定请求版本，默认使用最新3.0版本
                .apiVersion(SparkApiVersion.V3_5)
                .build();

        try {
            // 同步调用
            SparkSyncChatResponse chatResponse = sparkClient.chatSync(sparkRequest);
//            SparkTextUsage textUsage = chatResponse.getTextUsage();
            result =  chatResponse.getContent();

//            System.out.println("\n回答：" + chatResponse.getContent());
//            System.out.println("\n提问tokens：" + textUsage.getPromptTokens()
//                    + "，回答tokens：" + textUsage.getCompletionTokens()
//                    + "，总消耗tokens：" + textUsage.getTotalTokens());
        } catch (SparkException e) {
            System.out.println("发生异常了：" + e.getMessage());
        }
        return result;
    }
}
